
#region Using Statements

    using System;
    using System.Collections.Generic;
    using System.Linq;

    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.Content.Pipeline;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;

#endregion

namespace HumanElement.Xna.Construct.ContentPipeline
{
    /// <summary>
    /// SurfaceContent : The compile time asset container class for the Surface assets.
    /// </summary>
    public class SurfaceContent : ContentItem
    {

        /// <summary>
        /// 
        /// </summary>
        public sealed class Surface : ISurface
        {
            /// <summary>
            /// Gets the name.
            /// </summary>
            /// <value>The name.</value>
            public string Name
            {
                get;
                set;
            }

            /// <summary>
            /// Gets a value indicating whether this instance is visible.
            /// </summary>
            /// <value>
            /// 	<c>true</c> if this instance is visible; otherwise, <c>false</c>.
            /// </value>
            public bool IsVisible
            {
                get;
                private set;
            }

            /// <summary>
            /// Initializes the specified game host.
            /// </summary>
            /// <param name="gameHost">The game host.</param>
            public void Initialize(IGameHost gameHost)
            {
                IsVisible = true;
            }
            
            /// <summary>
            /// Gets or sets a value indicating whether this <see cref="ISurface"/> is enabled.
            /// </summary>
            /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
            public bool Enabled
            {
                get;
                set;
            }
            
            /// <summary>
            /// Loads the content.
            /// </summary>
            /// <param name="content">The content.</param>
            /// <returns></returns>
            public bool LoadContent(IContentManager content)
            {
                var res = false;

                // TODO: Load Surface Content here.
                

                return res;
            }

            /// <summary>
            /// Gets a value indicating whether this instance is loaded.
            /// </summary>
            /// <value><c>true</c> if this instance is loaded; otherwise, <c>false</c>.</value>
            public bool IsLoaded
            {
                get;
                private set;
            }

            /// <summary>
            /// Gets the pixel shader.
            /// </summary>
            /// <value>The pixel shader.</value>
            public PixelShader PixelShader
            {
                get;
                set;
            }

            /// <summary>
            /// Gets the vertex shader.
            /// </summary>
            /// <value>The vertex shader.</value>
            public VertexShader VertexShader
            {
                get;
                set;
            }

            /// <summary>
            /// Renders the specified device.
            /// </summary>
            /// <param name="device">The device.</param>
            /// <param name="viewport">The viewport.</param>
            public void Render(GraphicsDevice device, IViewport viewport)
            {
                
            }

            /// <summary>
            /// Updates the specified game time.
            /// </summary>
            /// <param name="gameTime">The game time.</param>
            /// <returns></returns>
            public void Update(GameTime gameTime)
            {
                throw new NotImplementedException();
            }
            
            /// <summary>
            /// Gets or sets a value indicating whether this <see cref="Surface"/> is paused.
            /// </summary>
            /// <value><c>true</c> if paused; otherwise, <c>false</c>.</value>
            public bool Paused
            {
                get;
                private set;
            }
            
            /// <summary>
            /// Gets the last game time.
            /// </summary>
            /// <value>The last game time.</value>
            public GameTime LastGameTime
            {
                get;
                private set;
            }

            #region IInitialize Members

            public void Initialize()
            {
                throw new NotImplementedException();
            }

            #endregion

            /// <summary>
            /// Gets or sets the manager.
            /// </summary>
            /// <value>The manager.</value>
            public IContentManager Manager
            {
                get; set;
            }
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SurfaceContent"/> class.
        /// </summary>
        public SurfaceContent() : base()
        {
            
        }
    }
}
